Spring Cloud Contract Testing একটি শক্তিশালী টুল যা প্রোডিউসার (Producer) এবং কনজিউমার (Consumer) এর মধ্যে যোগাযোগের চুক্তি বা কন্ট্রাক্ট পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি মাইক্রোসার্ভিস আর্কিটেকচারে ইন্টার-সার্ভিস কমিউনিকেশনের নির্ভুলতা নিশ্চিত করে।
Spring Cloud Contract Testing এর মূল উদ্দেশ্য হলো কনজিউমার এবং প্রোডিউসারের মধ্যে নির্ধারিত চুক্তি লঙ্ঘন না হয় তা নিশ্চিত করা। এটি প্রোডিউসার এবং কনজিউমার উভয়ের জন্যই আলাদা আলাদা পরীক্ষা চালায় এবং মাইক্রোসার্ভিসের মধ্যে সমন্বয় বজায় রাখে।
Spring Cloud Contract Testing-এর কাজ করার প্রক্রিয়া
Spring Cloud Contract Testing প্রোডিউসার এবং কনজিউমারের মধ্যে HTTP বা Messaging প্রোটোকলের ভিত্তিতে কন্ট্রাক্ট তৈরি করে। নিচে কাজের ধাপগুলো দেওয়া হলো:
১. কন্ট্রাক্ট সংজ্ঞায়িত করা
কন্ট্রাক্ট একটি DSL (Domain Specific Language)-এর মাধ্যমে সংজ্ঞায়িত করা হয়। এই কন্ট্রাক্ট ফাইলটি একটি প্রোডিউসারের প্রত্যাশিত আউটপুট এবং কনজিউমারের প্রত্যাশিত ইনপুট নির্ধারণ করে।
২. কন্ট্রাক্ট যাচাই করা
Spring Cloud Contract Verifier ব্যবহার করে প্রোডিউসার সাইডে অটো-জেনারেটেড টেস্ট তৈরি হয়। এটি নিশ্চিত করে যে প্রোডিউসার কন্ট্রাক্ট অনুযায়ী কাজ করছে।
৩. স্টাব জেনারেশন
কন্ট্রাক্ট ফাইল থেকে স্টাব তৈরি করা হয়, যা কনজিউমার সাইডে মক ডেটা হিসেবে ব্যবহৃত হয়। এটি কনজিউমার টেস্টিং সহজ করে তোলে।
উদাহরণ: Spring Cloud Contract Testing
কন্ট্রাক্ট সংজ্ঞায়ন (Producer Side)
Contract.make {
description "Should return a user by ID"
request {
method GET()
urlPath '/users/1'
}
response {
status 200
body([
id: 1,
name: "John Doe"
])
headers {
contentType(applicationJson())
}
}
}
উপরের কন্ট্রাক্টটি নির্ধারণ করে যে /users/1 এ GET রিকুয়েস্ট পাঠালে একটি 200 OK রেসপন্স পাওয়া যাবে, যার মধ্যে একটি JSON অবজেক্ট থাকবে।
প্রোডিউসার টেস্টিং
Spring Cloud Contract Verifier এই কন্ট্রাক্ট থেকে টেস্ট জেনারেট করবে। উদাহরণস্বরূপ:
@Test
public void validate_shouldReturnUserById() {
// Test logic for producer
RestAssured
.given()
.when()
.get("/users/1")
.then()
.statusCode(200)
.body("name", equalTo("John Doe"));
}
কনজিউমার টেস্টিং
স্টাব জেনারেট করার পর কনজিউমার মক সার্ভিস ব্যবহার করে টেস্ট করতে পারে। উদাহরণ:
@Test
public void shouldReturnUserByIdUsingStub() {
// Mock Server URL
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<User> response = restTemplate.getForEntity(
"http://localhost:8080/users/1", User.class);
assertEquals(200, response.getStatusCodeValue());
assertEquals("John Doe", response.getBody().getName());
}
Spring Cloud Contract Testing-এর সুবিধা
- চুক্তি লঙ্ঘন প্রতিরোধ: কনজিউমার এবং প্রোডিউসারের মধ্যে চুক্তি সঠিকভাবে পালন হচ্ছে কিনা তা নিশ্চিত করে।
- অটোমেশন: টেস্ট অটোমেশনের মাধ্যমে ত্রুটি কমায়।
- ডকুমেন্টেশন: কন্ট্রাক্ট ফাইল সরাসরি ডকুমেন্টেশন হিসেবে ব্যবহার করা যায়।
- স্টাব জেনারেশন: মক সার্ভার বা স্টাব তৈরি করে টেস্টিং দ্রুততর করে।
Read more